﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using YasharEl.Infrastructure.EntityModel;
using YasharEl.Infrastructure.Core.Prototype;
using YasharEl.Infrastructure.Core.Commenting;
using YasharEl.Infrastructure.TaskEngine.Assignments;

namespace YasharEl.Infrastructure.TaskEngine
{
    public interface ITask : IAggregateRoot<long>, IPrototypeEntity, ICommentable
    {
        long TaskId { get; set; }
        Guid? InitiatorCorrelationId { get; set; }
        string TaskName { get; set; }
        string TaskDescription { get; set; }

        ITaskDefinition TaskDefinition { get; }

        DateTime CreatedDate { get; set; }
        ITaskParticipant CreatedBy { get; set; }

        DateTime? ModifiedDate { get; set; }
        ITaskParticipant ModifiedBy { get; set; }

        TaskPriority TaskPriority { get; set; }
        TaskStatus TaskStatus { get; set; }
        TaskStatusReason TaskStatusReason { get; set; }

        ParticipantType ParticipantType { get; set; }

        bool IsDataModified { get; set; }

        ITaskParticipant ConsultWith { get; set; }
        DateTime? ReminderDate { get; set; }

        IList<ITaskAction> TaskActions { get; }

        IList<ITaskAssignment> CurrentAssignments { get; set; }
    }
}
